Julia 模块
阐述
模块是构建功能和包的基本单元。模块尽可能使用大驼峰命名,必要时采用复数形式。模块可以用于命名空间管理:
- 每个模块是一个新的全局作用域
- 模块通过
export
导出名称,用户代码通过using
和import
导入名称
每个名称都来自于一个模块,带有完整模块名的名称称为 qualified name,如 Base.Math.sin
;使用这一方式可以访问模块中的任意名称,甚至包括那些未导出的,也可以为它增加方法。
模块的使用
独立的 using
和 import
前者将模块名和所有 export
的名称导入当前命名空间,而后者只导入模块名。
带标识符的 using
和 import
将特定的名称导入当前命名空间(不包括模块名,也不考虑 export
)。两者的区别是后者允许不带模块名的情况下扩展方法。
重命名 as
用 using A: a as aa
以及 import A: a as aa
可以重命名一个标识符,但重命名模块只能通过 import A as AA
来完成。
相对路径导入
例如,在模块中引用子模块时,需要使用:
module Parent
using .Utils
end
子模块
子模块可以用于在模块中进一步划分功能,此时最好使用相对路径来导入。
实例
标准模块
Core
是语言核心功能Base
是一些基本的定义Main
是当前的顶层 模块
定义新的模块时,默认会包含 Base
和 Core
中的功能;如果不需要 Base
,可以使用 baremodule
:
baremodule Mod
using Base
eval(x) = Core.eval(Mod, x)
include(p) = Base.include(Mod, p)
...
end